package com.douma._2022_7_6;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 抖码算法，让算法学习变的简单有趣
 *
 * @作者 : 老汤
 */
public class 两数之和绝对值最小 {

    public static void main1(String[] args) {
        Scanner sc = new Scanner(System.in);

        String[] data = sc.nextLine().split(" ");
        int[] nums = new int[data.length];
        for (int i = 0; i < nums.length; i++) {
            nums[i] = Integer.valueOf(data[i]);
        }

        // 因为题目规定的输入数据规模是 1000 , 所以可以使用暴力解法
        // 暴力解法的时间复杂度 O(n^2)，不会超时
        int res = Integer.MAX_VALUE;
        for (int x = 0; x < nums.length; x++) {
            for (int y = x + 1; y < nums.length; y++) {
                int absSum = Math.abs(nums[x] + nums[y]);
                if (absSum < res) {
                    res = absSum;
                }
            }
        }

        System.out.println(res);

        sc.close();
    }

    // 按道理上面的算法是不会超时的，如果在实际的考试环境中，上面的解法会超时的话
    // 那么使用下面的解法吧
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String[] data = sc.nextLine().split(" ");
        // 将负数和正数分开放
        List<Integer> positiveNums = new ArrayList<>();
        List<Integer> negativeNums = new ArrayList<>();
        for (int i = 0; i < data.length; i++) {
            int num = Integer.valueOf(data[i]);
            if (num < 0) {
                negativeNums.add(num);
            } else {
                positiveNums.add(num);
            }
        }

        int negativeLen = negativeNums.size();
        int positiveLen = positiveNums.size();
        int res = Integer.MAX_VALUE;
        if (negativeLen == 0) {
            // 如果没有负数，也就是全是正数，那么最小值两个最小整数之和
            // 就是第 1 个正数和第 2 个正数
            int first = positiveNums.get(0);
            int second = positiveNums.get(1);
            res = Math.abs(first + second);
        } else if (positiveLen == 0) {
            // 如果没有正数，也就是全是负数，那么最小值两个最大负整数之和
            // 就是倒数第 1 个负正数和倒数第 2 个负正数
            int first = negativeNums.get(negativeLen - 1);
            int second = negativeNums.get(negativeLen - 2);
            res = Math.abs(first + second);
        } else {
            // 有正数也有负数，那么暴力枚举
            for (int x = 0; x < negativeLen; x++) {
                for (int y = 0; y < positiveLen; y++) {
                    int absSum = Math.abs(negativeNums.get(x) + positiveNums.get(y));
                    res = Math.min(res, absSum);
                }
            }
        }

        System.out.println(res);

        sc.close();
    }
}
